package gee

/*
此文件把有关路由的部分都独立出来，方便对路由功能进行增强，例如提供动态路由的支持

*/

import (
	"log"
	"net/http"
)

type router struct {
	handlers map[string]HandlerFunc //handlers图,里面存的是结构体类型，卧槽，这真是太牛逼了，在第二天封装之前，第一天图类型不是结构体，而是封装的函数，后来大版本更新，全更新了，卧槽，我研究了一下午，真是太牛比了
}

func newRouter() *router {
	return &router{handlers: make(map[string]HandlerFunc)} //建立新表
}

func (r *router) addRoute(method string, pattern string, handler HandlerFunc) { //像表中添加
	log.Printf("Route %4s - %s", method, pattern)
	key := method + "-" + pattern
	r.handlers[key] = handler
}

func (r *router) handle(c *Context) { //解析请求路径查找路由映像表
	key := c.Method + "-" + c.Path
	if handler, ok := r.handlers[key]; ok {
		handler(c)
	} else {
		c.String(http.StatusNotFound, "404 NOT FOUND: %s\n", c.Path)
	}
}
